package base.jdk8_demo.lambda.interfaces;

import org.junit.Test;

/**
 * jdk8 中对 Interface 的改进:
 * 接口中可以有方法实现了，而不需要是纯方法声明了，该方法用default开头，表明是接口的默认实现,且方法是public。
 * 为何jdk1.8支持接口有方法实现？
 * 首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程，缺陷是当需要修改接口时候，需要修改全部实现该接口的类，
 * 目前的 java8 之前的集合框架没有 foreach 方法，通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现。
 * 然而，对于已经发布的版本，是没法在给接口添加新方法的同时不影响已有的实现。所以引进的默认方法。
 * 他们的目的是为了解决接口的修改与现有的实现不兼容的问题。
 */
public class DefaultMethodTest {

    @Test
    public void testCase(){
        Vehicle v = new Car();
        v.print();
    }

}

interface Vehicle {
    default void print(){
        System.out.println("我是一辆车");
    }
    static void blowHorn(){
        System.out.println("按喇叭...");
    }
}

interface FourWheeler {
    default void print(){
        System.out.println("我是一辆4轮车");
    }
}

